﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SIGCBI.Entities;
using System.Data;
using System.Data.Entity;
using System.Data.OleDb;
using System.Data.Common;
using System.Data.SqlClient;

namespace SIGCBI.Repository
{
    public class SICBIDatabaseInitializer : DropCreateDatabaseAlways<SIGCBIContext>
    {
        protected override void Seed(SIGCBIContext context)
        {
            if (context == null)
                throw new ArgumentNullException("context");

            GetSexo().ForEach(p => context.SEXOes.Add(p));
            GetEstadoCivil().ForEach(p => context.ESTADO_CIVIL.Add(p));
            GetRol().ForEach(p => context.ROLs.Add(p));

            CargarUnidMedidas();
            CargarProductos();
            CargarTags();

            GetRols().ForEach(p => context.webpages_Roles.Add(p));
            context.webpages_Membership.Add(CreateMembership());
            GetPartidas().ForEach(p => context.PARTIDAs.Add(p));
            context.TRABAJADORes.Add(CreateDefaultWorker());
            GetCentrosDeCosto().ForEach(p => context.CENTRO_COSTOs.Add(p));
        }

        static List<SEXO> GetSexo()
        {
            var sexo = new List<SEXO>
            {
                new SEXO { Descripcion = "Masculino".ToUpper() },
                new SEXO { Descripcion = "Femenino".ToUpper() },
                new SEXO { Descripcion = "Desconocido".ToUpper() }
            };

            return sexo;
        }

        static List<ROL> GetRol()
        {
            var sexo = new List<ROL>
            {
                new ROL { Descripcion = "ADMINISTRADOR".ToUpper() },
                new ROL { Descripcion = "RRHH".ToUpper() },
                new ROL { Descripcion = "ASISTENTE SOCIAL".ToUpper() },
                new ROL { Descripcion = "CONTABILIDAD".ToUpper() },
                new ROL { Descripcion = "ADMISION".ToUpper() },
                new ROL { Descripcion = "ADMINISTRADOR DEL SISTEMA".ToUpper() }
            };

            return sexo;
        }

        static List<ESTADO_CIVIL> GetEstadoCivil()
        {
            var estadoCivil = new List<ESTADO_CIVIL>
           { 
                new ESTADO_CIVIL { Descripcion = "Casado (a)".ToUpper() },
                new ESTADO_CIVIL { Descripcion = "Conviviente (a)".ToUpper() },
                new ESTADO_CIVIL { Descripcion = "Viudo (a)".ToUpper() },
                new ESTADO_CIVIL { Descripcion = "Divorciado (a)".ToUpper() },
                new ESTADO_CIVIL { Descripcion = "Separado (a)".ToUpper() },
                new ESTADO_CIVIL { Descripcion = "Soltero (a)".ToUpper() },
                new ESTADO_CIVIL { Descripcion = "Desconocido".ToUpper() }
           };
            return estadoCivil;
        }

        public void CargarUnidMedidas()
        {
            string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source='I:\SIGCBI\SIGCBI\SIGCBI.Repository\Productos.xls'; Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1'"; //Office 2003-2007

            using (OleDbConnection connection = new OleDbConnection(excelConnectionString))
            {
                OleDbCommand command = new OleDbCommand("SELECT `Hoja4$`.Descripcion, `Hoja4$`.Abreviatura FROM `Hoja4$`", connection);

                connection.Open();

                // Create DbDataReader to Data Worksheet
                using (DbDataReader dr = command.ExecuteReader())
                {
                    // SQL Server Connection String
                    string sqlConnectionString = "Data Source=.;Initial Catalog=SIGCBI;Integrated Security=True";

                    // Bulk Copy to SQL Server
                    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString, SqlBulkCopyOptions.TableLock))
                    {
                        bulkCopy.ColumnMappings.Add("Descripcion", "Descripcion");
                        bulkCopy.ColumnMappings.Add("Abreviatura", "Abreviatura");
                        bulkCopy.DestinationTableName = "UNIDAD_MEDIDA";
                        bulkCopy.WriteToServer(dr);
                    }
                }
            }
        }

        public void CargarProductos()
        {
            string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source='I:\SIGCBI\SIGCBI\SIGCBI.Repository\Productos.xls'; Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1'"; //Office 2003-2007

            using (OleDbConnection connection = new OleDbConnection(excelConnectionString))
            {
                OleDbCommand command =
                    new OleDbCommand("SELECT `Hoja2$`.Codigo, `Hoja2$`.Nombre, `Hoja2$`.IdUnidadMedida, `Hoja2$`.Costo, `Hoja2$`.Stock, `Hoja2$`.Activo FROM `Hoja2$`", connection);

                connection.Open();

                using (DbDataReader dr = command.ExecuteReader())
                {
                    string sqlConnectionString = "Data Source=.;Initial Catalog=SIGCBI;Integrated Security=True";

                    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString, SqlBulkCopyOptions.TableLock))
                    {
                        bulkCopy.ColumnMappings.Add("Codigo", "Codigo");
                        bulkCopy.ColumnMappings.Add("Nombre", "Nombre");
                        bulkCopy.ColumnMappings.Add("IdUnidadMedida", "IdUnidadMedida");
                        bulkCopy.ColumnMappings.Add("Costo", "Costo");
                        bulkCopy.ColumnMappings.Add("Stock", "Stock");
                        bulkCopy.ColumnMappings.Add("Activo", "Activo");
                        bulkCopy.DestinationTableName = "PRODUCTO";
                        bulkCopy.WriteToServer(dr);
                    }
                }
            }
        }

        public void CargarTags()
        {
            string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source='I:\SIGCBI\SIGCBI\SIGCBI.Repository\Tags.xls'; Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1'"; //Office 2003-2007

            using (OleDbConnection connection = new OleDbConnection(excelConnectionString))
            {
                OleDbCommand command =
                    new OleDbCommand("SELECT `Hoja1$`.Descripcion, `Hoja1$`.Tag, `Hoja1$`.Comentario  FROM `Hoja1$`", connection);

                connection.Open();

                using (DbDataReader dr = command.ExecuteReader())
                {
                    string sqlConnectionString = "Data Source=.;Initial Catalog=SIGCBI;Integrated Security=True";

                    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString, SqlBulkCopyOptions.TableLock))
                    {
                        bulkCopy.ColumnMappings.Add("Descripcion", "Descripcion");
                        bulkCopy.ColumnMappings.Add("Tag", "Tag");
                        bulkCopy.ColumnMappings.Add("Comentario", "Comentario");
                        bulkCopy.DestinationTableName = "MENU";
                        bulkCopy.WriteToServer(dr);
                    }
                }
            }
        }

        public List<webpages_Roles> GetRols()
        {
            var webpages_roles = new List<webpages_Roles>
            {
                new webpages_Roles { RoleName = "ADMINISTRADOR".ToUpper() , 
                    UserProfiles = new List<UserProfile> { new UserProfile {  UserName = "Admin" } }
                },
                new webpages_Roles { RoleName = "GERENTE".ToUpper() },
                new webpages_Roles { RoleName = "COMITE".ToUpper() },
                new webpages_Roles { RoleName = "USUARIO".ToUpper() },
                
            };
            return webpages_roles;
        }

        public webpages_Membership CreateMembership()
        {
            var membership = new webpages_Membership
            {
                UserId = 1,
                CreateDate = DateTime.Now,
                ConfirmationToken = null,
                IsConfirmed = true,
                LastPasswordFailureDate = DateTime.Now,
                PasswordFailuresSinceLastSuccess = 0,
                Password = "APDmXVEaFXoLpc91YWOl79vg5AupMKkeL2cOQNPOIuXb67nodvePhWZUBOZ3ewqHcQ==",
                PasswordChangedDate = DateTime.Now,
                PasswordSalt = "",
                PasswordVerificationToken = null,
                PasswordVerificationTokenExpirationDate = null
            };

            return membership;
        }

        public List<PARTIDA> GetPartidas()
        {
            var partidas = new List<PARTIDA>
            {
                new PARTIDA { Codigo = "2111012" , Nombre = "A PERSONAS NATURALES" , Presupuesto = 0 },
                new PARTIDA { Codigo = "321111" , Nombre = "ALIMENTOS Y BEBIDAS PARA CONSUMO HUMANO" , Presupuesto = 0 },
                new PARTIDA { Codigo = "211913" , Nombre = "BONIFICACION POR ESCOLARIDAD" , Presupuesto = 0 },
                new PARTIDA { Codigo = "231213" , Nombre = "CALZADO" , Presupuesto = 0 },
                new PARTIDA { Codigo = "232621" , Nombre = "CARGOS BANCARIOS" , Presupuesto = 0 },
                new PARTIDA { Codigo = "231614" , Nombre = "DE SEGURIDAD" , Presupuesto = 0 },
                new PARTIDA { Codigo = "231711" , Nombre = "ENSERES" , Presupuesto = 0 },
                new PARTIDA { Codigo = "263242" , Nombre = "EQUIPOS MEDICOS" , Presupuesto = 0 },
                new PARTIDA { Codigo = "254111" , Nombre = "IMPUESTOS" , Presupuesto = 0 },
                new PARTIDA { Codigo = "231511" , Nombre = "REPUESTOS Y ACCESORIOS" , Presupuesto = 0, },
                
            };
            return partidas;
        }

        public TRABAJADOR CreateDefaultWorker()
        {
            var trabajador = new TRABAJADOR
            {
                ID=1,
                Dni = "00000000",
                ApePaterno = "Por Defecto",
                ApeMaterno = "Por Defecto",
                Nombres = "Por Defecto",
                FechaNacimiento = DateTime.Now,
                Edad = 50,
                Direccion = "Desconocida",
                Email = "desconocido@desconocido.com",
                IdEstadoCivil = 7,
                IdSexo = 3,
            };
            return trabajador;
        }

        public List<CENTRO_COSTO> GetCentrosDeCosto()
        {
            var centroCostos = new List<CENTRO_COSTO>
            {
                new CENTRO_COSTO { Descripcion = "ADMINISTRATIVOS", Codigo = "000001", IdTrabajador = 1},
                new CENTRO_COSTO { Descripcion = "COMISIÓN ADMINISTRADORA", Codigo = "000002", IdTrabajador = 1},
                new CENTRO_COSTO { Descripcion = "CONSTRUCCIÓN OBRAS", Codigo = "000003",  IdTrabajador = 1},
                new CENTRO_COSTO { Descripcion = "CONTRATOS DE LOCACION DE SERVICIOS", Codigo = "000004",  IdTrabajador = 1},
                new CENTRO_COSTO { Descripcion = "IMPUESTOS", Codigo = "000005",  IdTrabajador = 1},
                new CENTRO_COSTO { Descripcion = "MARKETING PUBLICIDAD", Codigo = "000006", IdTrabajador = 1},
                new CENTRO_COSTO { Descripcion = "PERSONAL CONTRATO ADMINISTRATIVO DE SERVICIOS", Codigo = "000007", IdTrabajador = 1},
                new CENTRO_COSTO { Descripcion = "PERSONAL DE PLANILLAS", Codigo = "000008", IdTrabajador = 1},
                new CENTRO_COSTO { Descripcion = "SERVICIOS PUBLICOS", Codigo = "000009",   IdTrabajador = 1},
                new CENTRO_COSTO { Descripcion = "SUB AREA DE SERVICIOS", Codigo = "000010",    IdTrabajador = 1},
                new CENTRO_COSTO { Descripcion = "SUB AREA DE MANTENIMIENTO", Codigo = "000011",  IdTrabajador = 1},

                //new CENTRO_COSTO { Descripcion = "ADMINISTRATIVOS", Codigo = "000001", TRABAJADOR = _trabajador,  IdTrabajador = _trabajador.ID},
                //new CENTRO_COSTO { Descripcion = "COMISIÓN ADMINISTRADORA", Codigo = "000002",TRABAJADOR = _trabajador, IdTrabajador = _trabajador.ID},
                //new CENTRO_COSTO { Descripcion = "CONSTRUCCIÓN OBRAS", Codigo = "000003",TRABAJADOR = _trabajador,  IdTrabajador = _trabajador.ID},
                //new CENTRO_COSTO { Descripcion = "CONTRATOS DE LOCACION DE SERVICIOS", Codigo = "000004", TRABAJADOR = _trabajador,  IdTrabajador = _trabajador.ID},
                //new CENTRO_COSTO { Descripcion = "IMPUESTOS", Codigo = "000005", TRABAJADOR = _trabajador,  IdTrabajador = _trabajador.ID},
                //new CENTRO_COSTO { Descripcion = "MARKETING PUBLICIDAD", Codigo = "000006",  TRABAJADOR = _trabajador, IdTrabajador = _trabajador.ID},
                //new CENTRO_COSTO { Descripcion = "PERSONAL CONTRATO ADMINISTRATIVO DE SERVICIOS", Codigo = "000007", TRABAJADOR = _trabajador, IdTrabajador = _trabajador.ID},
                //new CENTRO_COSTO { Descripcion = "PERSONAL DE PLANILLAS", Codigo = "000008",  TRABAJADOR = _trabajador, IdTrabajador = _trabajador.ID},
                //new CENTRO_COSTO { Descripcion = "SERVICIOS PUBLICOS", Codigo = "000009", TRABAJADOR = _trabajador,  IdTrabajador = _trabajador.ID},
                //new CENTRO_COSTO { Descripcion = "SUB AREA DE SERVICIOS", Codigo = "000010",   TRABAJADOR = _trabajador, IdTrabajador = _trabajador.ID},
                //new CENTRO_COSTO { Descripcion = "SUB AREA DE MANTENIMIENTO", Codigo = "000011", TRABAJADOR = _trabajador, IdTrabajador = _trabajador.ID},
            };
            return centroCostos;
        }




    }
}